package models

// 删除标签
func DeleteTag(tag Tag)(Tag, error){
	err := db.Delete(&tag).Error
	return tag, err
}

// 删除多个标签
func DeleteTags(tags []Tag)([]Tag, error){
	t := db.Begin()
	for i := range tags{
		if err := t.Delete(&tags[i]).Error; err != nil{
			t.Callback()
			return nil, err
		}
	}
	if err := t.Commit().Error; err != nil{
		t.Callback()
		return nil, err
	}
	return tags, nil
}

// 获取所有标签
func GetAllTags()([]Tag, error){
	var res []Tag
	if err := db.Find(&res).Error; err != nil{
		return nil, err
	}
	for i := range res{
		err := db.Table("article_tags").Select("count(*)").Where("tag_id = ?", res[i].Id).Find(&res[i].Nums).Error
		if err != nil{
			return nil, err
		}
	}
	return res, nil
}

// 获取标签
func GetTag(tag Tag)(Tag, error){
	if err := db.Find(&tag).Error; err != nil{
		return tag, err
	}
	err := db.Table("article_tags").Select("count(*)").Where("tag_id = ?", tag.Id).Find(&tag.Nums).Error
	if err != nil{
		return tag, err
	}
	return tag, nil
}

// 保存标签
func SaveTag(tag Tag)(Tag, error){
	err := db.Save(&tag).Error
	return tag, err
}

// 标签
type Tag struct {
	Id uint `gorm:"primarykey" json:"id"`
	Name string `gorm:"not null;unique" json:"name"`
	Nums uint `gorm:"-" json:"nums"`
}